Uso de los Lifecycle Hooks
Los Lifecycle Hooks son una parte esencial de la programación, permitiéndote definir el comportamiento en puntos específicos durante el ciclo de vida de un objeto. Al usar los Lifecycle Hooks, puedes controlar cuándo se ejecuta cierta lógica en relación con la existencia del objeto en la escena.
El entorno de ejecución de scripts admite tres Lifecycle Hooks principales:
1. startup
Propósito: Se ejecuta solo una vez cuando el objeto es instanciado en la escena, generalmente cuando es creado o inicializado. Este es el lugar para configurar tu estado inicial, cargar recursos o realizar cualquier acción que deba ocurrir al inicio del ciclo de vida del objeto.
Cuándo usarlo: Puedes utilizar este hook para realizar cualquier paso de inicialización, como establecer la posición inicial, cargar activos externos o preparar el objeto para la interacción.
Ejemplo:
function startup() {
// Establecer la posición inicial del objeto
object.setPosition(0, 0, 0);
console.log("Objeto inicializado.");
}
2. update
Propósito: Se ejecuta en cada fotograma mientras el objeto esté activo en la escena. Este hook te permite realizar actualizaciones continuas, como mover objetos, verificar la entrada del usuario o modificar propiedades basadas en condiciones dinámicas (como el tiempo o la interacción del jugador).
Parametros:
delta
: El tiempo en segundos desde el último fotograma (útil para actualizaciones independientes de la tasa de fotogramas).time
: El tiempo total transcurrido desde que la escena comenzó (útil para comportamientos basados en el tiempo).
Cuándo usarlo: Usa este hook para manejar la lógica que necesita actualizarse en tiempo real, como animación, actualizaciones de físicas y manejo de entradas.
Ejemplo:
function update(delta, time) {
// Hacer que el objeto se mueva hacia la derecha con el tiempo
let currentPosition = object.getPosition();
object.setPosition(currentPosition.x + 1 * delta, currentPosition.y, currentPosition.z);
}
3. dispose
Propósito: Se ejecuta cuando el objeto es destruido o eliminado de la escena. Este hook es esencial para limpiar recursos, detener procesos en curso o realizar cualquier lógica de finalización.
Cuándo usarlo: Puedes utilizar este hook para liberar memoria, detener animaciones o temporizadores, o guardar cualquier dato que deba persistir después de que el objeto sea eliminado de la escena.
Ejemplo:
function dispose() {
// Limpiar recursos antes de que el objeto sea destruido
console.log("El objeto se está eliminando. Limpiando recursos.");
object.stopAnimations();
object.removeEventListener('click', onClick);
}
Definiendo los Lifecycle Hooks
Puedes conectar tu script a eventos del ciclo de vida definiendo los Lifecycle Hooks con la directiva del preprocesador #pragma lifecycle
. Esta directiva permite que tu script responda a momentos clave en el ciclo de vida de un objeto, como la inicialización, actualizaciones durante la escena y destrucción.
Aquí tienes un ejemplo que demuestra cómo utilizar los tres Lifecycle Hooks dentro de un script:
#pragma lifecycle(startup, update, dispose)
function startup() {
// Código de configuración inicial
console.log("Iniciando el objeto...");
}
function update(delta, time) {
// Lógica continua (por ejemplo, movimiento, animaciones)
console.log("Actualizando el objeto...");
}
function dispose() {
// Código de limpieza (por ejemplo, eliminar eventos, detener animaciones)
console.log("Limpiando recursos del objeto...");
}
Alias para los Lifecycle Hooks
Una de las grandes características del entorno de scripting es la capacidad de usar alias. Esto te permite asignar nombres personalizados a tus funciones de Lifecycle Hooks, haciendo que tu código sea más legible o mejor adaptado a tus convenciones de nomenclatura.
Por ejemplo, si deseas usar nombres personalizados como start
o onActivate
en lugar del predeterminado startup
, puedes definir un alias con la siguiente sintaxis:
#pragma lifecycle(startup=start, update=updateLoop, dispose=cleanup)
function start() {
console.log("Objeto iniciado.");
}
function updateLoop(delta, time) {
console.log("Lógica continua ejecutándose.");
}
function cleanup() {
console.log("Limpieza de recursos al eliminar el objeto.");
}
En este caso:
start
será la función ejecutada cuando el objeto sea inicializado (equivalente astartup
).updateLoop
se ejecutará en cada fotograma en lugar de la función predeterminadaupdate
.cleanup
se invocará cuando el objeto sea destruido (equivalente adispose
).
Esto proporciona flexibilidad para adaptar las funciones de Lifecycle Hooks a tus preferencias de nomenclatura, asegurando que tus scripts se mantengan consistentes con el estilo de código de tu proyecto.